package my.avoskagae.client.eventbus;

import my.avoskagae.client.AvoskaGinModule;
import my.avoskagae.client.presenter.CatalogListPresenter;
import my.avoskagae.client.presenter.MainPresenter;
import my.avoskagae.client.presenter.ProductDetailPresenter;
import my.avoskagae.model.entity.Product;

import com.google.gwt.user.client.ui.IsWidget;
import com.mvp4g.client.annotation.Debug;
import com.mvp4g.client.annotation.Event;
import com.mvp4g.client.annotation.Events;
import com.mvp4g.client.annotation.Start;
import com.mvp4g.client.annotation.Debug.LogLevel;
import com.mvp4g.client.event.EventBus;

@Events(startPresenter = MainPresenter.class, ginModules = AvoskaGinModule.class)
@Debug(logLevel=LogLevel.DETAILED)
public interface MainBus extends EventBus {
	
	@Start
	@Event(handlers = {MainPresenter.class})
	void start();
	
	@Event(handlers = MainPresenter.class)
	void setMainList(IsWidget mainList);

	@Event(handlers = MainPresenter.class)
	void setDetail(IsWidget mainList);
	
	@Event(handlers = {CatalogListPresenter.class, ProductDetailPresenter.class})
	void showCatalog(); // TODO нужен ли такой?
	//TODO RefreshViewCatalog
	
	@Event(handlers = {ProductDetailPresenter.class})
	void changeSelectionProduct(Product newSelectedProduct);

	@Event(handlers = {CatalogListPresenter.class, ProductDetailPresenter.class})
	void changeCatalog(); // TODO тоже не совсем удачно
	
	//TODO Подумать какие операции вообще нужны, возможно это прямая проекция от юскейсов? 
	// задач или функций, связь с мотивами и структурой интерфейса. Эта часть плохо проработана
	// поэтому много неясностей в структуре евентов.
}
